PROJECT(HELLO)
# 语法 PROJECT(projectname [CXX] [C] [Java]) 定义工程名称
# 这个命令隐式定义了两个变量 <projectname>_BINARY_DIR 以及 <projectname>_SOURCE_DIR
# 这两个变量的值与cmake内置的 PROJECT_BINARY_DIR，PROJECT_SOURCE_DIR 一致
#（建议直接使用　PROJECT_BINARY_DIR，PROJECT_SOURCE_DIR）



SET(SRC_LIST main.cpp)
# SET 语法 SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
# SET 可以用来显式定义变量 如果有多个文件 也可以定义 SET(SRC_LIST main.cpp t1.c t2.c)


MESSAGE(STATUS "This is BINARY dir" ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir" ${HELLO_SOURCE_DIR})
# MESSAGE 语法 MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display"...)
# 用于向终端输出用于定义的信息，包含三种类型
# SEND_ERROR，产生错误，生成过程被跳过
# STATUS 输出前缀为--的信息
# FATAL_ERROR 立即终止所有cmake过程


ADD_EXECUTABLE(hello ${SRC_LIST})
# ADD EXECUTABLE 定义了这个工程会生成一个可执行文件，名为hello，相关的源文件是SRC_LIST中定义的文件列表

# CMAKE 的基本语法规则
# 1 变量使用${变量名}方式取值，但是IF中直接使用变量名
# 2 指令（参数1 参数2。。。） 参数使用括号括起，之间使用空格或者分号分割
# 3 指令是大小写无关的，参数和变量是大小写相关的，但是推荐指令全部使用大写


# 清理工程 make clean
# cmake 不支持 make distclean

# 内部构建：在源代码目录进行构建 比如在源代码目录使用 cmake .
# 外部构建【推荐】：在其他目录进行构建，例如，建立一个build文件夹 使用cmake .. 进行构建，好处是可以讲源码文件和构建文件分开，便于管理
# 使用内部构建和外部构建时，注意PROJECT_BINARY_DIR变量的变化，PROJECT_SOURCE_DIR指向源码目录，而PROJECT_BINARY_DIR指向构建目录